#include<iostream>
#include<unistd.h>
#include<signal.h>
#include<cassert>
using namespace std;

void handler(int signum)
{
    cout<<"获取了一个信号:"<<signum<<endl;
}

int main()
{
    struct sigaction act,oact;
    act.sa_flags=0;
    sigemptyset(&act.sa_mask);
    act.sa_handler=handler;

    sigaction(2,&act,&oact);

    cout<<"default action : "<< (int)(oact.sa_handler) <<endl;

    while(true) sleep(1);
    return 0;
}



// static void catchSig(int signum)
// {
//     cout<<"捕捉到了一个信号"<<signum<<" pid: "<<getpid()<<endl;
// }

// static void showPending(sigset_t &pending)
// {
//     for(int sig=1;sig<=31;sig++)
//     {
//         if(sigismember(&pending,sig))
//         {
//             cout<<"1";
//         }
//         else
//             cout<<"0";
//     }
//     cout<<endl;
// }

// int main()
// {
//     signal(2,catchSig);

//     sigset_t bset,obset;
//     sigset_t pending;
//     sigemptyset(&bset);
//     sigemptyset(&obset);
//     sigemptyset(&pending);

//     sigaddset(&bset,2);
//     int n=sigprocmask(SIG_BLOCK,&bset,&obset);
//     assert(n==0);
//     (void)n;

//     cout<<"二号信号捕捉成功..."<<endl;
//     int count=0;
//     while(true)
//     {
//         sigpending(&pending);
//         showPending(pending);
//         sleep(1);
//         count++;
//         if(count==20)
//         {
//             int n=sigprocmask(SIG_SETMASK,&obset,nullptr);
//             assert(n==0);
//             (void)n;
//             cout<<"接触对2号信号的block"<<endl;
//         }
//     }
// }


// void catchSig(int signum)
// {
//     cout<<"捕捉到了一个信号"<<signum<<" pid: "<<getpid()<<endl;
// }

// int main()
// {
//     for(int i=0;i<31;i++)  // 把所有信号捕获
//     {
//         signal(i,catchSig);
//     }
//     while(true)
//     {
//         sleep(1);
//     }
// }